home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / a / a_funk / antennen.tos / ANTENNEN / YAGI_DJ5.GFA < prev    next >
Encoding:
Text File  |  1995-04-30  |  15.8 KB  |  722 lines

  1. ' Msg# 114699   To: ATARI @ALLE   From: DJ5JQ   Date: 08Mar91/1847
  2. ' Subject: YAGI.GFA
  3. ' Bulletin ID: 083103DB0IZ
  4. ' Path: DB0CZ!OE9XPI!HB9EAS!DB0GE!DB0LJ!DB0IZ
  5. ' de DJ5JQ @ DB0IZ
  6. '
  7. ' Hallo OM's
  8. '
  9. ' Das folgende Programm zum Yagi-Design nach DL6WU wurde kürzlich
  10. ' von ON4ASX in der Rubrik Atari verbreitet. Ich habe das Programm
  11. ' ein wenig angepasst, sodaß es nun unter GFA-Basic lauffähig ist.
  12. ' Um den sicherlich einzigartigen Programmierstil zu erhalten,
  13. ' habe ich nur das unbedingt nötige am Programm verändert.
  14. ' Zum Test habe ich eine Antenne fuer das 23cm-Band berechnet. Die
  15. ' Ergebnisse stimmen recht genau mit einem bestehenden und
  16. ' funktionierenden Design überein.
  17. '
  18. ' 73 Ecki, DJ5JQ @ DB0IZ
  19. '
  20. maxels=100
  21. DIM s(maxels),d(maxels),dh(maxels),dl(maxels),t(maxels)
  22. ' ********* TITLE *********
  23. begin:
  24. CLS
  25. revideo(1)
  26. printat(1,23,"  DL6WU YAGI ANTENNA DESIGN  ",0)
  27. revideo(0)
  28. printat(2,24,"Original by  KY4Z and W6NBI",0)
  29. printat(3,25,"Ported to the ST by G6ATW",0)
  30. ' ********* SIGN **********
  31. mycall:
  32. printat(8,24,"Please Enter Your Sign",0)
  33. LOCATE 34,12
  34. INPUT "",sign$
  35. sign$=UPPER$(sign$)
  36. IF LEN(sign$)>10
  37.   GOTO mycall
  38. ENDIF
  39. ' ********* FREQUENCY **********
  40. clearit
  41. printat(8,24,"Enter Design Frequency [MHz]",0)
  42. LOCATE 34,12
  43. INPUT "",freq$
  44. f=VAL(freq$)
  45. cm=29979.3/f
  46. inch=11802.9/f
  47. ' ********* DIMENSIONS **********
  48. clearit
  49. printat(8,20,"Physical Dimensions Can Be Entered In",0)
  50. printat(10,29,"[ 1 ] Feet",0)
  51. printat(11,29,"[ 2 ] Metres",0)
  52. printat(12,29,"[ 3 ] Wavelengths",0)
  53. printat(14,29,"Select 1, 2 or 3",0)
  54. CLR u$
  55. DO
  56.   p$=INKEY$
  57.   SELECT p$
  58.   CASE "1"
  59.     u$="Feet"
  60.   CASE "2"
  61.     u$="Metres"
  62.   CASE "3"
  63.     u$="Wavelengths"
  64.   ENDSELECT
  65.   EXIT IF u$<>""
  66. LOOP
  67. ' ********** GAIN or BOOM LENGTH ***********
  68. l320:
  69. clearit
  70. printat(8,32,"You Can Either",0)
  71. printat(10,20,"[ 1 ] Specify forward gain in dBd and",0)
  72. printat(11,20,"      accept estimated boom length, or",0)
  73. printat(12,20,"[ 2 ] Specify boom length and accept",0)
  74. printat(13,20,"      estimated gain",0)
  75. printat(15,32,"Select 1 or 2",0)
  76. DO
  77.   kb$=INKEY$
  78. LOOP UNTIL kb$="1" OR kb$="2"
  79. IF kb$="2"
  80.   GOTO l530
  81. ENDIF
  82. ' ********** GAIN *********
  83. l390:
  84. g=0
  85. prat=0
  86. WHILE (g<11.8 OR g>21.6)
  87.   prat=prat+1
  88.   IF prat>3 THEN
  89.     dickhead
  90.   ENDIF
  91.   clearit
  92.   printat(8,24,"Forward Gain Must Be Between",0)
  93.   printat(9,24,"    11.8 dBd and 21.6 dBd",0)
  94.   printat(11,24,"  Enter Required Gain [dBd]",0)
  95.   LOCATE 36,13
  96.   INPUT "",gain$
  97.   g=VAL(gain$)
  98. WEND
  99. bl=EXP((g-9.2)/3.39)
  100. b1=bl*inch/12
  101. b2=bl*cm/100
  102. clearit
  103. printat(8,24,"Estimated Overall Boom Length",0)
  104. LOCATE 34,10
  105. PRINT USING "###.##",b1;
  106. PRINT " Feet";
  107. printat(12,20,"[ ",0)
  108. PRINT USING "###.##",b2;
  109. PRINT " Metres";
  110. PRINT USING "###.##",bl;
  111. PRINT " Wavelengths   ]";
  112. printat(15,24,"Is This Boom Length Ok ?  Y/N",0)
  113. DO
  114.   kb$=UPPER$(INKEY$)
  115. LOOP UNTIL kb$="Y" OR kb$="N"
  116. IF kb$="Y" THEN
  117.   GOTO l660
  118. ELSE
  119.   GOTO l320
  120. ENDIF
  121. l530:
  122. ' ********* BOOM LENGTH **********
  123. bl=0
  124. prat=0
  125. WHILE (bl<2.2 OR bl>39)
  126.   prat=prat+1
  127.   IF prat>3
  128.     dickhead
  129.   ENDIF
  130.   clearit
  131.   printat(8,20,"Overall Boom Length Must Be Between",0)
  132.   printat(9,28,"2.2 and 39 Wavelengths",0)
  133.   b1=2.2*cm/100
  134.   b2=39*cm/100
  135.   b3=2.2*inch/12
  136.   b4=39*inch/12
  137.   printat(11,25,"[ ",0)
  138.   PRINT USING "###.##",b1;
  139.   PRINT " to ";
  140.   PRINT using;"###.##",b2;
  141.   PRINT " Metres ]";
  142.   printat(12,25,"[ ",0)
  143.   PRINT USING "###.##",b3;
  144.   PRINT " to ";
  145.   PRINT USING "###.##",b4;
  146.   PRINT " Feet   ]";
  147.   printat(14,25,"Enter Boom Length in ",0)
  148.   PRINT u$;
  149.   LOCATE 36,16
  150.   INPUT "",boom$
  151.   bl=VAL(boom$)
  152.   IF p$="1"
  153.     bl=bl*12/inch
  154.   ENDIF
  155.   IF p$="2"
  156.     bl=bl*100/cm
  157.   ENDIF
  158. WEND
  159. g=9.2+3.39*LOG(bl)
  160. printat(18,20,"Estimated Maximum Gain is",0)
  161. PRINT USING "###.##",g;
  162. PRINT " dBd";
  163. printat(20,26,"Is This Gain Ok ?  Y/N",0)
  164. DO
  165.   kb$=UPPER$(INKEY$)
  166. LOOP UNTIL kb$="Y" OR kb$="N"
  167. IF kb$="N"
  168.   GOTO l320
  169. ENDIF
  170. ' ********* BOOM MATERIAL AND ELEMENT MOUNTING ************
  171. l660:
  172. clearit
  173. printat(8,18,"Select Boom Material and Element Mounting",0)
  174. printat(10,18,"[ 1 ] Metal boom,  elements pass through",0)
  175. printat(11,18,"      and are NOT INSULATED",0)
  176. printat(12,18,"[ 2 ] Metal boom,  elements pass through",0)
  177. printat(13,18,"      but are INSULATED",0)
  178. printat(14,18,"[ 3 ] Non-metallic boom, or elements are",0)
  179. printat(15,18,"      mounted on insulators",0)
  180. printat(17,18,"WARNING: option 3 implies NO CORRECTION",0)
  181. printat(18,18,"         for influence of metal boom !",0)
  182. printat(19,18,"         If in doubt, choose 1 or 2",0)
  183. printat(21,27,"Select 1, 2 or 3",0)
  184. DO
  185.   e$=INKEY$
  186. LOOP UNTIL e$="1" OR e$="2" OR e$="3"
  187. IF e$="3" THEN
  188.   bc1=0
  189.   bd=0
  190.   GOTO l1070
  191. ENDIF
  192. l780:
  193. bd=-1
  194. WHILE (bd<0 OR bd>0.06)
  195.   clearit
  196.   printat(8,24,"Enter Boom Diameter or Width",0)
  197.   printat(9,24,"of Square Section in ",0)
  198.   IF p$="1"
  199.     PRINT "Inches";
  200.   ENDIF
  201.   IF p$="2"
  202.     PRINT "Centimetres";
  203.   ENDIF
  204.   d1=0.06*cm
  205.   d2=0.06*inch
  206.   printat(11,18,"[ Maximum ",0)
  207.   PRINT USING "##.##",d1;
  208.   PRINT " Centimetres";
  209.   PRINT USING "##.##",d2;
  210.   PRINT " Inches ]";
  211.   LOCATE 36,13
  212.   INPUT "",boomd$
  213.   bd=VAL(boomd$)
  214.   IF p$="1"
  215.     bd=bd/inch
  216.   ENDIF
  217.   IF p$="2"
  218.     bd=bd/cm
  219.   ENDIF
  220. WEND
  221. bc1=733*bd*(0.055-bd)-504*bd*(0.03-bd)
  222. clearit
  223. printat(8,18,"Your choice of boom material and element",0)
  224. printat(9,18,"mounting method requires a correction to",0)
  225. printat(10,18,"all the element lengths. If the elements",0)
  226. printat(11,18,"pass diametrically through the boom, and",0)
  227. printat(12,18,"are  bonded to  it, the boom  correction",0)
  228. printat(13,18,"would be ",0)
  229. PRINT USING "#.####",bc1;
  230. PRINT " of the boom diameter.";
  231. IF e$="1" THEN
  232.   GOTO l950
  233. ELSE
  234.   bc1=bc1/2
  235. ENDIF
  236. printat(14,18,"Since you have chosen insulated elements",0)
  237. printat(15,18,"the boom correction is one-half that, ie",0)
  238. LOCATE 18,16
  239. PRINT USING "#.####",bc1;
  240. PRINT " of the boom diameter.";
  241. l950:
  242. printat(18,20,"Is This Boom Correction Ok ?  Y/N",0)
  243. DO
  244.   kb$=UPPER$(INKEY$)
  245. LOOP UNTIL kb$="Y" OR kb$="N"
  246. IF kb$="Y"
  247.   GOTO l1070
  248. ENDIF
  249. clearit
  250. printat(8,20,"  Hmmm .... in that case you can",0)
  251. printat(10,20,"[ 1 ] Enter your own boom correction",0)
  252. printat(11,20,"[ 2 ] Select a different element",0)
  253. printat(12,20,"      mounting method",0)
  254. printat(13,20,"[ 3 ] Accept my boom correction",0)
  255. printat(14,20,"      after all",0)
  256. printat(15,20,"      Select 1, 2 or 3",0)
  257. DO
  258.   kb$=UPPER$(INKEY$)
  259. LOOP UNTIL kb$="1" OR kb$="2" OR kb$="3"
  260. IF kb$="2"
  261.   GOTO l660
  262. ENDIF
  263. IF kb$="3"
  264.   GOTO l1070
  265. ENDIF
  266. bc1=-1
  267. WHILE (bc1<0 OR bc1>1)
  268.   clearit
  269.   printat(8,20,"Enter your correction as a fraction",0)
  270.   printat(9,20,"of boom  diameter  between  0 and 1",0)
  271.   LOCATE 36,11
  272.   INPUT bcor$
  273.   bc1=VAL(bcor$)
  274. WEND
  275. bc=bc1*bd
  276. ' ********* ELEMENT DIAMETERS *************
  277. l1070:
  278. dd=-1
  279. ed=-1
  280. WHILE (dd<0.001 OR dd>0.02 OR ed<0.001 OR ed>0.02)
  281.   clearit
  282.   printat(8,22,"Element Diameter Must Be Between",0)
  283.   printat(9,22,"   0.001 and 0.02 Wavelengths",0)
  284.   d1=0.001*cm
  285.   d2=0.02*cm
  286.   d3=0.001*inch
  287.   d4=0.02*inch
  288.   printat(11,23,"[ ",0)
  289.   PRINT USING "##.##",d1;
  290.   PRINT " to ";
  291.   PRINT USING "##.##",d2;
  292.   PRINT " Centimetres ]";
  293.   printat(12,23,"[ ",0)
  294.   PRINT USING "##.##",d3;
  295.   PRINT " to ";
  296.   PRINT USING "##.##",d4;
  297.   PRINT " Inches      ]";
  298.   printat(14,24,"Enter Driven Element Diameter",0)
  299.   LOCATE 32,15
  300.   PRINT "in ";
  301.   IF p$="1" THEN
  302.     PRINT "Inches";
  303.   ELSE
  304.     PRINT "Centimetres";
  305.   ENDIF
  306.   LOCATE 35,17
  307.   INPUT dd$
  308.   dd=VAL(dd$)
  309.   printat(19,22,"Enter Parasitic Element Diameter",0)
  310.   LOCATE 32,20
  311.   PRINT "in ";
  312.   IF p$="1"
  313.     PRINT "Inches";
  314.   ELSE
  315.     PRINT "Centimetres";
  316.   ENDIF
  317.   LOCATE 35,22
  318.   INPUT ed$
  319.   ed=VAL(ed$)
  320.   IF p$="1"
  321.     dd=dd/inch
  322.     ed=ed/inch
  323.   ENDIF
  324.   IF p$="2"
  325.     dd=dd/cm
  326.     ed=ed/cm
  327.   ENDIF
  328. WEND
  329. ' ********** MATHS ***********
  330. l1180:
  331. m=0
  332. sy=1
  333. sr=0.216144
  334. l1200:
  335. la=bl-sr
  336. FOR n=1 TO 14
  337.   s(n)=0.081444+0.12178*LOG(n)
  338.   IF n=1
  339.     t(n)=sr+s(n)
  340.   ELSE
  341.     t(n)=t(n-1)+s(n)
  342.   ENDIF
  343.   la=la-s(n)
  344.   IF la<0 THEN
  345.     m=n-1
  346.     n=14
  347.     sy=la
  348.     la=la+s(n)
  349.   ENDIF
  350. NEXT n
  351. IF sy<0
  352.   GOTO l1330
  353. ENDIF
  354. FOR n=15 TO maxels
  355.   s(n)=s(14)
  356.   t(n)=t(n-1)+s(n)
  357.   la=la-s(n)
  358.   IF la<0
  359.     m=n-1
  360.     la=la+s(n)
  361.     n=maxels
  362.   ENDIF
  363. NEXT n
  364. l1330:
  365. ll=bl-la
  366. g1=9.2+3.39*LOG(ll)
  367. IF g1<11.8
  368.   bl=1.05*bl
  369. ELSE
  370.   GOTO l1380
  371. ENDIF
  372. GOTO l1200
  373. l1380:
  374. RESTORE
  375. CLR exit!
  376. FOR q=1 TO 7
  377.   READ k,k1,k2,k3,k4
  378.   IF k=ed
  379.     j=0
  380.     exit!=TRUE
  381.   ENDIF
  382.   EXIT IF exit
  383.   IF k<ed
  384.     l=k
  385.   ELSE
  386.     GOTO l1430
  387.   ENDIF
  388.   kl1=k1
  389.   kl2=k2
  390.   kl3=k3
  391.   kl4=k4
  392. l1430:
  393.   IF k>ed
  394.     h=k
  395.   ELSE
  396.     GOTO l1460
  397.   ENDIF
  398.   kh1=k1
  399.   kh2=k2
  400.   kh3=k3
  401.   kh4=k4
  402.   EXIT IF TRUE
  403.   ' GOTO l1470
  404. l1460:
  405. NEXT q
  406. IF NOT exit!
  407. l1470:
  408.   j=(ed-l)/(h-l)
  409. ENDIF
  410. l1480:
  411. r=0.476945+bc
  412. de=(0.4777-(1.0522*dd)+(0.43363*(dd^-0.014891)))/2
  413. FOR n=1 TO m
  414.   IF j=0
  415.     d(n)=(k1-k2*LOG(n))*(1-k3*EXP(-k4*n))
  416.   ELSE
  417.     l2040
  418.   ENDIF
  419.   d(n)=d(n)+bc
  420. NEXT n
  421. ' ********* SCREEN DISPLAY ***********
  422. l2500:
  423. CLS
  424. IF LEN(sign$)
  425.   printat(1,20,"     DL6WU YAGI DESIGN FOR ",0)
  426.   PRINT sign$;
  427. ELSE
  428.   printat(1,20,"---- DL6WU YAGI DESIGN DETAILS ----",0)
  429. ENDIF
  430. printat(3,20,"Design Frequency      :  ",0)
  431. PRINT freq$;" MHz";
  432. printat(4,20,"Number of Elements    :  ",0)
  433. PRINT m+2;
  434. printat(5,20,"Boom Diameter         :  ",0)
  435. xx=@units(bd)
  436. PRINT USING "###.###",xx;
  437. @printunits
  438. printat(6,20,"Element Diameters",0)
  439. printat(7,20,"        Driven        :  ",0)
  440. xx=@units(dd)
  441. PRINT USING "###.###",xx;
  442. @printunits
  443. printat(8,20,"        Parasitic     :  ",0)
  444. xx=@units(ed)
  445. PRINT USING "###.###",xx;
  446. @printunits
  447. printat(9,20,"Electrical Boom Length:  ",0)
  448. xx=@units(ll)
  449. PRINT USING "###.###",xx;
  450. @printunits
  451. printat(10,20,"Estimated Performance",0)
  452. printat(11,20,"         Gain         :  ",0)
  453. PRINT USING "###.###",g1;
  454. PRINT " dBd";
  455. bh=30-3.14*(g1-14)
  456. printat(12,20,"         E-Beamwidth  :  ",0)
  457. PRINT USING "###.###",bh;
  458. PRINT " deg";
  459. bv=bh/COS(bh/(2*57))
  460. printat(13,20,"         H-Beamwidth  :  ",0)
  461. PRINT USING "###.###",bv;
  462. PRINT " deg";
  463. printat(14,20,"Stacking Distances",0)
  464. printat(15,20,"         Horizontal   :  ",0)
  465. sh=51/bh
  466. sv=51/bv
  467. xx=@units(sh)
  468. PRINT USING "###.###",xx;
  469. @printunits
  470. printat(16,20,"         Vertical     :  ",0)
  471. xx=@units(sv)
  472. PRINT USING "###.###",xx;
  473. @printunits
  474. LOCATE 1,18
  475. PRINT TAB(10);"NOTES:"
  476. IF LEN(bcor$)
  477.   PRINT TAB(10);"You have chosen your own element mounting method"
  478.   PRINT TAB(10);"or boom correction"
  479.   GOTO l2770
  480. ENDIF
  481. SELECT e$
  482. CASE "1"
  483.   PRINT TAB(10);"Elements are SECURELY connected to the metal boom"
  484. CASE "2"
  485.   PRINT TAB(10);"Elements are INSULATED through the metal boom"
  486. CASE "3"
  487.   PRINT TAB(10);"Elements are INSULATED or the boom is NON-CONDUCTIVE"
  488. ENDSELECT
  489. l2770:
  490. IF e$<>"3"
  491.   PRINT TAB(10);"A boom correction of ";
  492.   PRINT USING "#.####",bc1;
  493.   PRINT " the boom diameter has been applied"
  494. ENDIF
  495. PRINT TAB(10);"Tolerance required for element lengths is +/- ";
  496. xx=@units(0.003)
  497. PRINT USING "#.####",xx;
  498. @printunits
  499. PRINT
  500. PRINT
  501. PRINT TAB(20);"Hard Copy of Detailed Antenna Design? Y/N"
  502. DO
  503.   kb$=UPPER$(INKEY$)
  504. LOOP UNTIL kb$="Y" OR kb$="N"
  505. IF kb$="Y"
  506.   GOTO hardcopy
  507. ENDIF
  508. again:
  509. PRINT
  510. PRINT TAB(35);"Run Again? Y/N";
  511. DO
  512.   kb$=UPPER$(INKEY$)
  513. LOOP UNTIL kb$="Y" OR kb$="N"
  514. IF kb$="Y" THEN
  515.   GOTO begin
  516. ELSE
  517.   SYSTEM
  518. ENDIF
  519. ' ********** PRINTER OUTPUT ************
  520. hardcopy:
  521. IF LEN(sign$)
  522.   LPRINT TAB(10);"DL6WU YAGI DESIGN FOR ";sign$
  523.   LPRINT TAB(10);
  524.   FOR i=1 TO LEN(sign$)
  525.     LPRINT "=";
  526.   NEXT i
  527.   LPRINT "======================"
  528. ELSE
  529.   LPRINT TAB(10);"    DL6WU YAGI DESIGN DETAILS"
  530.   LPRINT TAB(10);"=================================="
  531. ENDIF
  532. LPRINT
  533. LPRINT TAB(10);"Original program by KY4Z and W6NBI"
  534. LPRINT TAB(10);"Ported  to  the Atari ST  by G6ATW"
  535. LPRINT TAB(10);"          ST Version 1.0"
  536. LPRINT
  537. LPRINT
  538. LPRINT TAB(10);"Design Frequency      :  ";freq$;" MHz"
  539. LPRINT TAB(10);"Number of Elements    :  ";m+2
  540. LPRINT TAB(10);"Boom Diameter         :  ";
  541. xx=@units(bd)
  542. LPRINT USING "###.###",xx;
  543. @lprintunits
  544. LPRINT TAB(10);"Element Diameters";
  545. LPRINT TAB(10);"        Driven        :  ";
  546. xx=@units(dd)
  547. LPRINT USING "###.###",xx;
  548. @lprintunits
  549. LPRINT TAB(10);"        Parasitic     :  ";
  550. xx=@units(ed)
  551. LPRINT USING "###.###",xx;
  552. @lprintunits
  553. LPRINT TAB(10);"Electrical Boom Length:  ";
  554. xx=@units(ll)
  555. LPRINT USING "###.###",xx;
  556. @lprintunits
  557. LPRINT
  558. LPRINT TAB(10);"Estimated Performance"
  559. LPRINT TAB(10);"         Gain         :  ";
  560. LPRINT USING "###.###",g1;
  561. LPRINT " dBd"
  562. bh=30-3.14*(g1-14)
  563. LPRINT TAB(10);"         E-Beamwidth  :  ";
  564. LPRINT USING "###.###",bh;
  565. LPRINT " deg"
  566. bv=bh/COS(bh/(2*57))
  567. LPRINT TAB(10);"         H-Beamwidth  :  ";
  568. LPRINT USING "###.###",bv;
  569. LPRINT " deg"
  570. LPRINT
  571. LPRINT TAB(10);"Stacking Distances"
  572. LPRINT TAB(10);"         Horizontal   :  ";
  573. sh=51/bh
  574. sv=51/bv
  575. xx=@units(sh)
  576. LPRINT USING "###.###",xx;
  577. @lprintunits
  578. LPRINT TAB(10);"         Vertical     :  ";
  579. xx=@units(sv)
  580. LPRINT USING "###.###",xx;
  581. @lprintunits
  582. LPRINT TAB(10);"NOTES:"
  583. IF LEN(bcor$)
  584.   LPRINT TAB(10);"You have chosen your own element mounting method"
  585.   LPRINT TAB(10);"or boom correction"
  586.   GOTO p2770
  587. ENDIF
  588. SELECT e$
  589. CASE "1"
  590.   LPRINT TAB(10);"Elements are SECURELY connected to the metal boom"
  591. CASE "2"
  592.   LPRINT TAB(10);"Elements are INSULATED through the metal boom"
  593. CASE "3"
  594.   LPRINT TAB(10);"Elements are INSULATED or the boom is NON-CONDUCTIVE"
  595. ENDSELECT
  596. p2770:
  597. IF e$<>"3"
  598.   LPRINT TAB(10);"A boom correction of ";
  599.   LPRINT USING "#.####",bc1;
  600.   LPRINT " the boom diameter has been applied"
  601. ENDIF
  602. LPRINT TAB(10);"Tolerance required for element lengths is +/- ";
  603. xx=@units(0.003)
  604. LPRINT USING "#.####",xx;
  605. @lprintunits
  606. LPRINT CHR$(12)
  607. LPRINT TAB(6);"CUMULATIVE";TAB(58);"ELEMENT"
  608. LPRINT TAB(6);"SPACING";TAB(58);"LENGTH"
  609. LPRINT TAB(6);"----------";TAB(58);"-------"
  610. LPRINT TAB(4);"Cms";TAB(15);"Inches";TAB(56);"Cms";TAB(64);"Inches"
  611. LPRINT
  612. LPRINT TAB(4);"0";TAB(15);"0";
  613. LPRINT TAB(23);"REFL ----------#----------   ";
  614. xx=r*cm
  615. LPRINT USING "####.##",xx;
  616. LPRINT TAB(63);
  617. xx=r*inch
  618. LPRINT USING "####.##",xx;
  619. LPRINT TAB(38);"#"
  620. LPRINT TAB(2);
  621. xx=sr*cm
  622. LPRINT USING "####.##",xx;
  623. LPRINT TAB(13);
  624. xx=sr*inch
  625. LPRINT USING "####.##",xx;
  626. LPRINT TAB(23);"DR EL =========#=========    ";
  627. xx=de*cm
  628. LPRINT USING "####.##",xx;
  629. LPRINT TAB(63);
  630. xx=de*inch
  631. LPRINT USING "####.##",xx
  632. FOR n=1 TO m
  633.   LPRINT TAB(38);"#"
  634.   LPRINT TAB(2);
  635.   xx=t(n)*cm
  636.   LPRINT USING "####.##",xx;
  637.   LPRINT TAB(13);
  638.   xx=t(n)*inch
  639.   LPRINT USING "####.##",xx;
  640.   LPRINT TAB(23);"D";STR$(n);
  641.   IF n<10
  642.     LPRINT " ";
  643.   ENDIF
  644.   LPRINT "    --------#--------     ";
  645.   xx=d(n)*cm
  646.   LPRINT USING "####.##",xx;
  647.   LPRINT TAB(63);
  648.   xx=d(n)*inch
  649.   LPRINT USING "####.##",xx
  650. NEXT n
  651. GOTO again
  652. SYSTEM
  653. > PROCEDURE l2040
  654.   dl(n)=(kl1-kl2*LOG(n))*(1-kl3*EXP(-kl4*n))
  655.   dh(n)=(kh1-kh2*LOG(n))*(1-kh3*EXP(-kh4*n))
  656.   d(n)=dl(n)+j*(dh(n)-dl(n))
  657. RETURN
  658. DATA .001, .4711, .018, .08398, .965
  659. DATA .003, .462, .01941, .08543, .9697
  660. DATA .005, .4538, .02117, .0951, 1.007
  661. DATA .007, .4491, .02274, .08801, .9004
  662. DATA .01, .4421, .02396, .1027, 1.038
  663. DATA .015, .4358,.02558, .1149, 1.034
  664. DATA .02, .4268, .02614, .1112, 1.036
  665. > FUNCTION units(wl)
  666. '  shared p$, inch, cm
  667. IF p$="1"
  668.   units=wl*inch
  669. ENDIF
  670. IF p$="2"
  671.   units=wl*cm
  672. ENDIF
  673. RETURN units
  674. ENDFUNC
  675. > PROCEDURE printunits
  676. '   shared p$
  677. IF p$="1"
  678.   PRINT " Inches";
  679. ENDIF
  680. IF p$="2"
  681.   PRINT " Centimetres";
  682. ENDIF
  683. IF p$="3"
  684.   PRINT " Wavelengths";
  685. ENDIF
  686. RETURN
  687. > PROCEDURE lprintunits
  688. '   shared p$
  689. IF p$="1"
  690.   LPRINT " Inches"
  691. ENDIF
  692. IF p$="2"
  693.   LPRINT " Centimetres"
  694. ENDIF
  695. IF p$="3"
  696.   LPRINT " Wavelengths"
  697. ENDIF
  698. RETURN
  699. PROCEDURE printat(row,col,s$,curs)
  700. LOCATE col,row
  701. PRINT s$;
  702. RETURN
  703. > PROCEDURE revideo(rev)
  704. LOCAL junk
  705. IF rev
  706.   junk=BIOS(3,2,27)
  707.   junk=BIOS(3,2,ASC("p"))
  708. ELSE
  709.   junk=BIOS(3,2,27)
  710.   junk=BIOS(3,2,ASC("q"))
  711. ENDIF
  712. RETURN
  713. PROCEDURE clearit
  714. LOCAL junk
  715. LOCATE 6,1
  716. junk=BIOS(3,2,27)
  717. junk=BIOS(3,2,ASC("J"))
  718. RETURN
  719. > PROCEDURE dickhead
  720. RETURN
  721.  
  722.